package 栈;

import java.util.Stack;

/**
 * https://leetcode-cn.com/problems/valid-parentheses/
 * @author Mxb
 * @version 1.0
 * @date 2020/2/26 19:54
 */
public class _20_有效的括号 {
    public boolean isValid(String s) {
        Stack<Character> stack = new Stack();
        for (int i = 0; i < s.length(); i++) {
            // 返回索引处的 字符
            char c = s.charAt(i);
            // 如果是 左字符  || 或
            if (c == '{' || c == '[' || c == '(') {
                // 入栈
                stack.push(c);
            }else{  // 遇见右  字符
                if (stack.empty()) return false;
                // 出栈
                char left = (char) stack.pop();
                // 判断左右是否 匹配
                if (left == '{' && c!= '}') return false;
                if (left == '[' && c!= ']') return false;
                if (left == '(' && c!= ')') return false;
            }
        }
        // 扫描完所有字符
        return stack.isEmpty();
    }

    /**
     * 方法 一
     * @param s
     * @return
     */
    public boolean isValid1(String s) {
        while (s.contains("{}") || s.contains("()") || s.contains("[]")) {
            s = s.replace("{}", "");
            s = s.replace("()", "");
            s = s.replace("[]", "");
        }
        return s.isEmpty();
    }
}
